home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf / tracker.library / tracker.dok < prev    next >
Text File  |  1994-06-13  |  49KB  |  935 lines

  1.  
  2.                               tracker.library
  3.  
  4.           --------------------------------------------------------
  5.                  © Copyright 1993, 1994 by Arnold Schommer,
  6.                            Alle Recht vorbehalten
  7.           --------------------------------------------------------
  8.                    V6.8, Update zu V4.5 von FRANZ-PD_#283
  9.           --------------------------------------------------------
  10.  
  11.                             Inhaltsverzeichnis:
  12.  
  13.                 0. Warnung
  14.                 1. Was ist / was kann die "tracker.library" ?
  15.                 2. Wie benutzt man die "tracker.library" ?
  16.                 3. Trackinglevels
  17.                 4. Hard- und Softwarevoraussetzungen
  18.                 5. Copyright, Garantie
  19.                 6. Anschrift des Autors
  20.                 7. Sonstiges
  21.                 8. Danksagung
  22.                 A. Die Funktionen der "tracker.library"
  23.  
  24.           --------------------------------------------------------
  25.  
  26.           0. Warnung
  27.  
  28.           Die "tracker.library" ist alles andere als  vollständig.
  29.           Ich gebe sogar zu, daß ich sie nicht  einmal   ausgiebig
  30.           auf Fehler untersucht habe.
  31.  
  32.           Deshalb: Benutzung auf eigene Gefahr.
  33.  
  34.           Ich selbst benutze die Library häufig und halte  sie  im
  35.           groben für fehlerfrei, aber  es  sind  viele  Funktionen
  36.           integriert, die ich praktisch nie benutze.
  37.           Leider  sehe  ich  mich   deshalb   außer   stande,   zu
  38.           garantieren, daß durch  die  Library  keine  Schäden  am
  39.           Computer oder den vorhandenen Datenbeständen  entstehen.
  40.           Ich  kann  nur  versprechen,   nicht   absichtlich   ein
  41.           trojanisches Pferd in die Welt gesetzt zu haben.
  42.  
  43.  
  44.           1. Was ist / was kann die "tracker.library" ?
  45.  
  46.           "tracker.library" ist eine sog. shared library, das  ist
  47.           jene spezielle Form von Library, wie sie z.B. im  LIBS:-
  48.           Verzeichnis anzufinden sind.
  49.           Sie ist als Tool  für  Programmierer  gedacht.  Wie  oft
  50.           liest man in C Programmteile wie folgt:
  51.  
  52.               VOID CloseUp();
  53.               {
  54.                   COUNT i;
  55.  
  56.                   if(devopen)             CloseDevice(ior);
  57.                   if(ior)                 DeleteExtIO(ior);
  58.                   if(port)                DeletePort(port);
  59.                   for(i=0;i<2;++i)
  60.                       if(Sprite[i]!=-1)   FreeSprite(Sprite[i]);
  61.                   for(i=0;i<4;++i)
  62.                       if(Raster[i])
  63.                           FreeRaster(Raster,320,256);
  64.                   if(Font)                CloseFont(Font);
  65.                   if(Window)              CloseWindow(Window);
  66.                   if(Screen)              CloseScreen(Screen);
  67.                   if(Buffer)              FreeMem(Buffer,size);
  68.                   if(GfxBase)             CloseLibrary(GfxBase);
  69.                   if(IntuitionBase)
  70.                       CloseLibrary(IntuitionBase);
  71.                   exit(0);
  72.               }
  73.  
  74.           Das  ist  nun  eben  der   Fluch   eines   hochflexiblen
  75.           Multitasking-Betriebssystems,   mögen   Sie   vielleicht
  76.           denken -  Recht  haben  Sie.  Und  doch,  es  geht  auch
  77.           einfacher:
  78.  
  79.               VOID CloseUp();
  80.               {
  81.                   if(TrackerBase)     CloseLibrary(TrackerBase);
  82.                   exit(0);
  83.               }
  84.  
  85.           Ich schätze, hiermit   ist   anschaulich   demonstriert,
  86.           was meine tracker.library  bezweckt:  Das  sich  nämlich
  87.           nicht mehr der  Programmierer  um  die  Freigabe   aller
  88.           möglichen System-Ressourcen kümmern muß.
  89.           Man benutzt einfach statt der althergebrachten  Routinen
  90.           jene   der   "tracker.library",   um    Systemressourcen
  91.           anzufordern. Die Freigabe kann  dann  entweder  explizit
  92.           durch Aufruf eigener  Freigabefunktionen  oder  implizit
  93.           durch "CloseLibrary(TrackerBase)" erfolgen.
  94.           Die Library ist für  den  Einsatz  unter  Kickstart  1.3
  95.           oder 2.0 geeignet.
  96.  
  97.  
  98.           2. Wie benutzt man die "tracker.library" ?
  99.  
  100.           Nun - ich habe nicht Lust, Ihnen hier zu  erklären,  wie
  101.           man eine shared library auf dem Amiga benutzt. Wenn  Sie
  102.           das noch  nicht  aus  dem  ff  beherrschen,  können  Sie
  103.           vermutlich  ohnehin  nichts  mit  der  "tracker.library"
  104.           anfangen.
  105.           Für alle, die ich noch  nicht  vergrault  habe  nun  ein
  106.           paar (möglicherweise wichtige) Hinweise zu den Dateien:
  107.           - "tracker.library": die Library selbst. Am besten,  Sie
  108.             kopieren sie nach "LIBS:".
  109.           - "tracker.h": ein C-Includefile mit Prototypes und  ein
  110.             paar Definitionen. Da ich nur mit DICE arbeite, müssen
  111.             Sie das File eventuell  an  Ihren  Compiler  anpassen.
  112.             Sollte  nach  "libraries/"  im  Include-   Verzeichnis
  113.             ihres   C-Compilers   kopiert   werden   (für    DICE:
  114.             "DINCLUDE:AMIGA20/libraries" o.ä.).
  115.           - "tracker_lib.fd":   ein    BASIC-fd-File    mit    den
  116.             Deklarationen der  Funktionen  der  "tracker.library".
  117.             Nicht, daß man unter BASIC programmieren sollte,  aber
  118.             dieses  Format  ist  wohl  der  Standard  schlechthin,
  119.             wenn es  darum  geht,  Libraries  auch  für  beliebige
  120.             Programmiersprachen   zur   Verfügung   zu    stellen.
  121.             Obendrein ist es ganz  gut  lesbar,  so  daß  man  mit
  122.             etwas Erfahrung das Interface auch  selbst  entwickeln
  123.             kann.
  124.           - "tracker.lib": eine DICE-Link-Library mit Stubroutinen
  125.             für die Library.  Wurde  mit  "fdtolib"  erzeugt.  Für
  126.             andere Compiler sollten sie versuchen,  mit  ähnlichen
  127.             Tools etwas entsprechendes  zu  erzeugen.  Sollte  für
  128.             DICE nach "DLIB:" kopiert werden.
  129.           - "tracker.i": ein Assembler-Includefile  mit  LVOs  und
  130.             ein paar Definitionen.  Sollte  nach  "libraries/"  im
  131.             Include-Verzeichnis ihres Assemblers kopiert werden.
  132.           - "TRKMonitor": Dieses Programm protokolliert,  wie  die
  133.             tracker.library gerade  benutzt  wird.  CLI-  und  WB-
  134.             fähig, benötigt allerdings Dos V36+.
  135.           - "Demos": Dieses Unterverzeichnis enthält einige  Demo-
  136.             Progrämmchen für die tracker.library. Diese Demos sind
  137.             nur unter dos.library V36+ lauffähig  (Vorsicht:  kein
  138.             Test !), da sie DOS.VPrintf() benutzen.
  139.             Hier kann  man  sich  exemplarisch  ansehen,  wie  die
  140.             Library benutzt wird. Eigentlich habe ich  mit  diesen
  141.             Progrämmchen  in  der  Anfangsphase  des  Projekts  zu
  142.             testen  versucht,  wie  fehlerfrei  die  Routinen   im
  143.             Hinblick auf Verschachtelung mehrerer Aufrufe sind.
  144.             Wollen sie sie selbst assemblieren, sind sie eventuell
  145.             auf  meine  eigenen   Header-Files   für   die   LVO's
  146.             angewiesen.   Kopieren   sie    dafür    "exec_LVO.i",
  147.             "dos_LVO.i"  und  "intuition_LVO.i"  in  das  Include-
  148.             Verzeichnis   ihres   Assemblers,    allerdings    als
  149.             "exec/LVO.i", "dos/LVO.i" und "intuition/LVO.i".
  150.  
  151.           Aus der Arbeitsweise der Library  ergeben  sich  gewisse
  152.           Einschränkungen. Da die verschiedenen Benutzer über ihre
  153.           Task-Addressen identifiziert werden, ist es  z.B.  nicht
  154.           möglich, Interrupts einfach die TrackerBase zu übergeben
  155.           oder die Library für Routinen zu nutzen, die keinem oder
  156.           mehreren Tasks angehören  (z.B.  Patches  für  Libraries
  157.           oder Libraries selbst).
  158.           Diese Arbeitsweise ist übrigens nicht eine  willkürliche
  159.           Einschränkung meinerseits, sondern ergibt sich  aus  der
  160.           Notwendigkeit,      beim       CloseLibrary(TrackerBase)
  161.           festzustellen, welche  Objekte  freizugegben  sind.  Die
  162.           Vergabe von User-ID's  wäre  allein  wegen  des  dadurch
  163.           nötigen zusätzlichen Parameters nicht vertretbar.
  164.  
  165.  
  166.           3. Trackinglevels
  167.  
  168.           Jedes unter tracker.library allozierte Objekt ist  einem
  169.           TrackingLevel zugeordnet. So  kann  man  selber  Gruppen
  170.           bilden, die auf einmal freigegeben werden  können,  ohne
  171.           die Library schließen zu müssen. Beim  Öffnen  wird  der
  172.           TrackingLevel auf  1  initialisiert,  und  bis  auf  die
  173.           folgenden Funktionen wird er nicht verändert.
  174.           Große Ausnahme: GetWBMsg() speichert die Startup-Message
  175.           unter TrackingLevel #0, um sie aus allem herauszuhalten.
  176.           Der TrackingLevel ist (z.Zt., aber ich habe  nicht  vor,
  177.           es zu ändern) als UWORD definiert.
  178.  
  179.  
  180.           4. Hard- und Softwarevoraussetzungen
  181.  
  182.           Die "tracker.library" wurde auf einem A2000B  mit  A2630
  183.           (4MB)  unter  Kickstart  2.0  entwickelt.   Soweit   ich
  184.           beurteilen kann, sollte sie auf allen Amigas  (zumindest
  185.           ab Kickstart 1.3) laufen.
  186.  
  187.  
  188.           5. Copyright, Garantie
  189.  
  190.           Die "tracker.library" ist Freeware.  Sie  darf  beliebig
  191.           oft   kopiert   und   weitergegeben  werden.   Ausnahme:
  192.           Verboten  ist  die  Weitergabe  (auch    zusammen    mit
  193.           anderen Programmen), wenn dafür Kosten von mehr  als  DM
  194.           5,- (Porto nicht inbegriffen) berechnet werden.
  195.           Leider sehe ich mich - rein technisch  -  außer  stande,
  196.           zu garantieren, daß durch mein  Programm  keine  Schäden
  197.           am  Computer   oder   den   vorhandenen   Datenbeständen
  198.           entstehen. Ich kann nur versprechen,  nicht  absichtlich
  199.           ein trojanisches Pferd in die Welt gesetzt zu haben.
  200.  
  201.  
  202.           6. Anschrift des Autors
  203.  
  204.           Arnold Schommer
  205.           Erikaweg 16
  206.           40670 Meerbusch-Strümp
  207.  
  208.  
  209.           7. Sonstiges
  210.  
  211.           Ich wäre dankbar für BugReports, und zwar mit  möglichst
  212.           genauer Beschreibung,
  213.               a) auf welchem Amiga und mit  welchen  Erweiterungen
  214.                  der Fehler auftrat
  215.               b) wie der Fehler provoziert werden kann
  216.               c) wie sich der Fehler äußert
  217.           Ich werde versuchen, den Fehler zu  beheben,  aber  wenn
  218.           er  auf  meinem  A2000B  mit  (oder  ohne)  A2630  nicht
  219.           auftritt, kann ich kaum etwas tun.
  220.           Für Erweiterungsvorschläge bin ich  nicht  unbedingt  zu
  221.           erwärmen. Schließlich habe ich noch  nicht  einmal  alle
  222.           Funktionen  realisiert,  die  ich  ursprünglich   einmal
  223.           geplant hatte.
  224.           Sehr  dankbar  wäre  ich  dagegen,  falls   mir   jemand
  225.           zuverlässige Informationen geben könnte,  wie  man  eben
  226.           doch   die   Workbench-StartupMessage   abfragen   kann,
  227.           nachdem bereits Libraries geöffnet wurden. Das ist  laut
  228.           Commodore verboten  (und  nach  eigenen  Versuchen  auch
  229.           schlicht nicht möglich - WaitPort() versagt  scheinbar),
  230.           aber ich fände es doch ganz passend, wenn das ginge.
  231.  
  232.  
  233.           8. Danksagung
  234.  
  235.           Vielen Dank an die Entwickler der  "arp.library"  -  für
  236.           die    großartige     Idee,     Systemressourcen     via
  237.           CloseLibrary() wieder freizugeben.
  238.  
  239.           --------------------------------------------------------
  240.  
  241.           A. Die Funktionen der "tracker.library"
  242.  
  243.           Im Prinzip kann man die Dokumentation nachlesen, wo  man
  244.           die Dokumentation  für  Systemroutinen  eben  nachliest.
  245.           Ich habe mich bei der Entwicklung  v.a.  an  das  "AMIGA
  246.           intern" von  Data  Becker  (das  ich  aber  ausdrücklich
  247.           NICHT weiterempfehlen kann) und  das  "RKRM  Includes  &
  248.           Autodocs" von Addison-Wesley gehalten.
  249.           Die Funktionen der "tracker.library" unterscheiden  sich
  250.           wie folgt von den Originalen:
  251.           - Sie haben alle den Namensvorsatz "TRK_". Dieser  dient
  252.             v.a. zur Unterscheidung von den Originalen.
  253.             (Dies  trifft  nicht  auf   die   Library-spezifischen
  254.              Funktionen zur Verwaltung der TrackingLevels zu).
  255.           - Bei  einigen   Freigabefunktionen   können   Parameter
  256.             wegfallen (z.B. die Länge  des  Speicherbereiches  bei
  257.             "TRK_FreeMem()")
  258.           - Selbstverständlich erwarten die Funktionen in  A6  die
  259.             Adresse   der   "tracker.library",   nicht   die   der
  260.             "exec.library" etc.
  261.           Es folgt eine kurze Dokumentation  der  Funktionen.  Die
  262.           Bemerkung "kompatibel" bzw. "abwärts-kompatibel" bezieht
  263.           sich AUSSCHLIESSSLICH auf  Funktion  und  Parameter,  es
  264.           ist nämlich unbedingt nötig, Ressourcen,  die  über  die
  265.           "tracker.library" angefordert wurden,  auch  über  diese
  266.           freizugeben (und sei  es  implizit  per  CloseLibrary())
  267.           und umgekehrt  Ressourcen,  die  über  andere  Libraries
  268.           angefordert  wurden,  auch  über  die  jewilige  Library
  269.           freizugeben.
  270.           Werden Parameter und/oder  Ergebnis  nicht  erwähnt,  so
  271.           gilt  hier  dasselbe  wie  für  die  genannte  Original-
  272.           Funktion.
  273.  
  274.           Vorweg eine Liste von Funktionen, die sich erheblich von
  275.           ihren Originalen unterscheiden:
  276.           TRK_Examine, TRK_ExamineFH, TRK_ExNext, TRK_Info,
  277.           TRK_GetPrefs, TRK_GetDefPrefs, TRK_SetPrefs,
  278.           TRK_AslRequest, TRK_FreeGadgets, TRK_PutDiskObject,
  279.           TRK_PutDefDiskObject
  280.  
  281.           --------------------------------------------------------
  282.           TRK_OpenStdLibrary: Standard-Library öffnen
  283.           Parameter: d0 = Versionsnummer
  284.                      d1 = Schlüssel-Nummer (siehe tracker.i/.h)
  285.           Ergebnis: Zeiger auf die Library / 0 für Fehler
  286.           --------------------------------------------------------
  287.           TRK_OpenLibrary: Library öffnen
  288.           Original-Funktion: Exec.OpenLibrary
  289.           --------------------------------------------------------
  290.           TRK_CloseLibrary: Library schließen
  291.           Original-Funktion: Exec.CloseLibrary
  292.           Freigabefunktion zu TRK_OpenLibrary und
  293.           TRK_OpenStdLibrary
  294.           --------------------------------------------------------
  295.           TRK_AllocMem: Speicher allozieren
  296.           Originalfunktion: Exec.AllocMem
  297.                             (ersetzt genauso Exec.AllocVec)
  298.           --------------------------------------------------------
  299.           TRK_FreeMem: Speicher freigeben
  300.           Originalfunktion: Exec.FreeMem
  301.                             (ersetzt genauso Exec.FreeVec)
  302.           Freigabefunktion zu TRK_AllocMem
  303.           Parameter D0 = Größe des Speicherbereiches entfällt
  304.           --------------------------------------------------------
  305.           TRK_OpenDevice: Device öffnen
  306.           Originalfunktion: Exec.OpenDevice
  307.           --------------------------------------------------------
  308.           TRK_CloseDevice: Device schließen
  309.           Originalfunktion: Exec.CloseDevice
  310.           Freigabefunktion zu TRK_OpenDevice
  311.           --------------------------------------------------------
  312.           TRK_GetDevice: IORequest und ReplyPort allozieren und
  313.                          Device dazu öffnen
  314.           Parameter: a0 = Zeiger auf den Device-Namen
  315.                      d0 = Unit-Nummer
  316.                      d1 = Flags
  317.                      d2 = Größe des IORequest in Bytes (WORD)
  318.           Ergebnis: Die Adresse des IORequest bzw. 0 für Fehler
  319.           diese Routine ersetzt in etwa [zuzüglich Fehler-Checks]:
  320.           struct IORequest *TRK_GetDevice(UBYTE *devname,
  321.                         ULONG unit, ULONG flags, ULONG iosize)
  322.           { struct IORequest *io;
  323.             io=CreateExtIO(CreatePort(0,0),iosize);
  324.             OpenDevice(devname,unit,io,flags);
  325.             return(io);
  326.           }
  327.           --------------------------------------------------------
  328.           TRK_CreatePort: MessagePort einrichten
  329.           Originalfunktion: Exec.CreateMsgPort
  330.           läuft auch unter 1.3
  331.           Parameter: a0 = Zeiger auf den gewünschten
  332.                           MessagePort-Namen
  333.                      d0 = Priorität
  334.           Ergebnis: Adresse des Ports / 0 für Fehler
  335.           --------------------------------------------------------
  336.           TRK_DeletePort: MessagePort freigeben
  337.           Originalfunktion: Exec.DeleteMsgPort
  338.           läuft auch unter 1.3
  339.           Freigabefunktion zu TRK_CreatePort
  340.           Parameter: a0 = Zeiger auf den Port
  341.           kein Ergebnis
  342.           --------------------------------------------------------
  343.           TRK_CreateExtIO: IORequest einrichten
  344.           Originalfunktion: Exec.CreateIORequest
  345.           läuft auch unter 1.3
  346.           Parameter: a0 = Zeiger auf den IOReplyPort
  347.                      d0 = Größe des IORequest in Bytes
  348.                           (Achtung: Angabe in WORD!!)
  349.           Ergebnis: Adresse des erzeugten IORequest / 0 für Fehler
  350.           Wird kein  ReplyPort  übergeben  (a0==0),  so  wird  ein
  351.           eigener per CreatePort(0,0) angelegt.  Dieser  wird  bei
  352.           der Freigabe des IORequest ebenfalls  freigegeben,  darf
  353.           aber NICHT per TRK_DeletePort() freigegeben werden !
  354.           --------------------------------------------------------
  355.           TRK_DeleteExtIO: IORequest freigeben
  356.           Originalfunktion: Exec.DeleteIORequest
  357.           läuft auch unter 1.3
  358.           Freigabefunktion zu TRK_CreateExtIO
  359.           Parameter: a0 = Zeiger auf den Port
  360.           kein Ergebnis
  361.           --------------------------------------------------------
  362.           TRK_GetWBMsg: Workbench-Startup-Message lesen und zur
  363.                         Beantwortung sichern
  364.           keine Parameter
  365.           Ergebnis: Adresse der StartupMessage-Struktur / 0 für
  366.                     CLI-Start (oder Fehler)
  367.           Diese Funktion hat einige Besonderheiten:
  368.           *  Die  Startup-Message  wird  grundsätzlich  im  eigens
  369.             reservierten  TrackingLevel   0   registriert.   Damit
  370.             verhindert  die  Library,  daß  sie  vorzeitig   durch
  371.             FreeTrackingLevels o.ä. freigegeben wird.
  372.           * Wer nicht gerade  in  Assembler  programmiert,  sollte
  373.             sicher gehen, daß sein Startup-Code die Message  nicht
  374.             abfängt (weder vorher noch nachher).
  375.           * es gibt keine entsprechende Freigabe-Funktion (da nach
  376.             dem ReplyMsg() das Programm aus dem Speicher  entfernt
  377.             wird).
  378.           * Bei der "Freigabe" wird Exec.Forbid() aufgerufen,  wie
  379.             es sein muß. Der Benutzer sollte  also  dafür  sorgen,
  380.             daß CloseLibrary(TrackerBase) möglichst spät erfolgt.
  381.           * Diese Funktion crasht unter Kickstart 1.3,  unter  2.0
  382.             läuft  sie  problemlos.  Ohne  über  die   Gründe   zu
  383.             spekulieren, habe ich darauf verzichtet, sie mit einem
  384.             Test auf  Kickstart  2+  zu  sichern,  da  daß  wieder
  385.             Probleme erzeugen würde, zu erkennen, ob das  Programm
  386.             nun unter 1.3 oder unter 2.0 &  CLI  gestartet  wurde.
  387.             Wer unter 1.3 lauffähige Programme schreiben will, muß
  388.             ja ohnehin ohne sie auskommen (können).
  389.           * Ich bin mir nicht sicher, ob es überhaupt erlaubt ist,
  390.             die  Startup-Message   abzufragen,   nachdem   bereits
  391.             Libraries geöffnet wurden. Wer Wert darauf legt, nicht
  392.             von Commodore verflucht zu werden,  sollte  vielleicht
  393.             besser auf diese Funktion verzichten.
  394.           --------------------------------------------------------
  395.           TRK_AllocSignal: Signal allozieren
  396.           Originalfunktion: Exec.AllocSignal
  397.           --------------------------------------------------------
  398.           TRK_FreeSignal: Signal freigeben
  399.           Originalfunktion: Exec.FreeSignal
  400.           Freigabefunktion zu TRK_AllocSignal
  401.           --------------------------------------------------------
  402.           TRK_AddIntServer: IRQ-Server einfügen
  403.           Originalfunktion: Exec.AddIntServer
  404.           --------------------------------------------------------
  405.           TRK_RemIntServer: IRQ-Server ausklinken
  406.           Originalfunktion: Exec.RemIntServer
  407.           Parameter d0 = Interrupt-Nummer entfällt
  408.           Freigabefunktion zu TRK_AddIntServer
  409.           --------------------------------------------------------
  410.           TRK_Open: Datei öffnen
  411.           Originalfunktion: Dos.Open
  412.           --------------------------------------------------------
  413.           TRK_OpenFromLock: Datei via Lock öffnen
  414.           Originalfunktion: Dos.OpenFromLock
  415.           unter OS <2.0 wird 0 zurückgegeben
  416.           --------------------------------------------------------
  417.           TRK_Close-Routine: Datei schließen
  418.           Originalfunktion: Dos.Close
  419.           Freigabefunktion zu TRK_Open und TRK_OpenFromLock
  420.           --------------------------------------------------------
  421.           TRK_Lock: Lock einrichten
  422.           Originalfunktion: Dos.Lock
  423.           --------------------------------------------------------
  424.           TRK_DupLock: Lock duplizieren
  425.           Originalfunktion: Dos.DupLock
  426.           --------------------------------------------------------
  427.           TRK_DupLockFromFH: Lock von FileHandle duplizieren
  428.           Originalfunktion: Dos.DupLockFromFH
  429.           unter OS <2.0 wird 0 zurückgegeben
  430.           --------------------------------------------------------
  431.           TRK_UnLock: Lock freigeben
  432.           Originalfunktion: Dos.UnLock
  433.           Freigabefunktion zu TRK_Lock, TRK_DupLock und
  434.                 TRK_DupLockFromFH
  435.           --------------------------------------------------------
  436.           TRK_Examine: FIB allozieren und Lock untersuchen
  437.           Originalfunktion: Dos.Examine
  438.           Parameter D2 = Adresse des FIB entfällt
  439.           Das untersuchte Lock wird bei Freigabe des FIB ebenfalls
  440.                 freigegeben !
  441.           --------------------------------------------------------
  442.           TRK_ExamineFH: FIB allozieren und FileHandle untersuchen
  443.           Originalfunktion: Dos.ExamineFH
  444.           Parameter D2 = Adresse des FIB entfällt
  445.           unter OS <2.0 wird 0 zurückgegeben
  446.           --------------------------------------------------------
  447.           TRK_ExamineName: Lock zu Dateinamen Namen einrichten,
  448.                            FIB allozieren und Lock untersuchen
  449.           Parameter: D1 = Zeiger auf den Dateinamen
  450.           Ergebnis: Zeiger auf den FIB / 0 für Fehler
  451.           --------------------------------------------------------
  452.           TRK_ExNext: nächsten Directory-Eintrag untersuchen
  453.           Originalfunktion: Dos.ExNext
  454.           Parameter D1 = Lock-BPTR entfällt
  455.           --------------------------------------------------------
  456.           TRK_FreeFIB: FIB und assoziiertes Lock freigeben
  457.           Parameter: d1 = Zeiger auf den FIB
  458.           kein Ergebnis
  459.           Freigabefunktion zu TRK_Examine, TRK_ExamineFH,
  460.                 TRK_ExamineName und TRK_ExNext
  461.           --------------------------------------------------------
  462.           TRK_Info: InfoData-Struktur allozieren und anhand eines
  463.                 Locks füllen
  464.           Originalfunktion: Dos.Info
  465.           Parameter D2 = Adresse der InfoData-Struktur entfällt
  466.           Ergebnis: Zeiger auf die InfoData-Struktur /
  467.                         0 für Fehler
  468.           Freigabefunktion für die erhaltene InfoData-Struktur ist
  469.                 TRK_FreeMem
  470.           --------------------------------------------------------
  471.           TRK_InfoName: InfoData-Struktur allozieren und anhand
  472.                         eines Dateinamens füllen lassen
  473.           Parameter: d1 = Zeiger auf den Dateinamen
  474.           Ergebnis: Zeiger auf die InfoData-Struktur /
  475.                         0 für Fehler
  476.           Freigabefunktion für die erhaltene InfoData-Struktur ist
  477.                 TRK_FreeMem
  478.           --------------------------------------------------------
  479.           TRK_LoadSeg: Segment laden
  480.           Originalfunktion: Dos.LoadSeg
  481.           --------------------------------------------------------
  482.           TRK_NewLoadSeg: Segment laden
  483.           Originalfunktion: Dos.NewLoadSeg
  484.           unter OS <2.0 wird 0 zurückgegeben
  485.           --------------------------------------------------------
  486.           TRK_UnLoadSeg: Segment freigeben
  487.           Originalfunktion: Dos.UnLoadSeg
  488.           Freigabefunktion zu TRK_LoadSeg und TRK_NewLoadSeg
  489.           --------------------------------------------------------
  490.           TRK_AllocDosObject: DosObject allozieren
  491.           Originalfunktion: Dos.AllocDosObject
  492.           unter OS <2.0 wird 0 zurückgegeben
  493.           --------------------------------------------------------
  494.           TRK_FreeDosObject: DosObject freigeben
  495.           Originalfunktion: Dos.FreeDosObject
  496.           Freigabefunktion zu TRK_AllocDosObject
  497.           Parameter D1 = Typ-Kennung entfällt
  498.           Bemerkung:  Nach  einem  früheren  Dok-File  wurde   der
  499.           Parameter D2 (Zeiger auf das  Objekt)  in  D1  erwartet.
  500.           Dies war falsch.
  501.           --------------------------------------------------------
  502.           TRK_StartNotify: Notification starten
  503.           Originalfunktion: Dos.StartNotify
  504.           unter OS <2.0 wird 0 zurückgegeben
  505.           --------------------------------------------------------
  506.           TRK_EndNotify: Notification beenden
  507.           Originalfunktion: Dos.EndNotify
  508.           Freigabefunktion zu TRK_StartNotify
  509.           --------------------------------------------------------
  510.           TRK_ReadArgs: Parameter-Parsing
  511.           Originalfunktion: Dos.ReadArgs
  512.           --------------------------------------------------------
  513.           TRK_FreeArgs: RDArgs-Struktur freigeben
  514.           Originalfunktion: Dos.FreeArgs
  515.           Freigabefunktion zu TRK_ReadArgs
  516.           --------------------------------------------------------
  517.           TRK_OpenFont: RomFont öffnen
  518.           Originalfunktion: Graphics.OpenFont
  519.           --------------------------------------------------------
  520.           TRK_OpenDiskFont: DiskFont öffnen
  521.           Originalfunktion: Diskfont.OpenDiskFont
  522.           --------------------------------------------------------
  523.           TRK_CloseFont: Font schließen
  524.           Originalfunktion: Graphics.CloseFont
  525.           Freigabefunktion zu TRK_OpenFont und TRK_OpenDiskFont
  526.           --------------------------------------------------------
  527.           TRK_AllocRaster: Raster allozieren
  528.           Originalfunktion: Graphics.AllocRaster
  529.           --------------------------------------------------------
  530.           TRK_FreeRaster: Raster freigeben
  531.           Originalfunktion: Graphics.FreeRaster
  532.           Freigabefunktion zu TRK_AllocRaster
  533.           Parameter D0 und D1 (Größe des Rasters) entfallen
  534.           --------------------------------------------------------
  535.           TRK_GetSprite: Sprite allozieren
  536.           Originalfunktion: Graphics.GetSprite
  537.           --------------------------------------------------------
  538.           TRK_FreeSprite: Sprite freigeben
  539.           Originalfunktion: Graphics.FreeSprite
  540.           Freigabefunktion zu TRK_GetSprite
  541.           --------------------------------------------------------
  542.           TRK_OpenWindow: Window öffnen
  543.           Originalfunktion: Intuition.OpenWindow
  544.           --------------------------------------------------------
  545.           TRK_CloseWindow: Window schließen
  546.           Originalfunktion: Intuition.CloseWindow
  547.           Freigabefunktion zu TRK_OpenWindow,
  548.                 TRK_OpenWindowTagList, TRK_OpenWindowOnPubScreen
  549.                 und TRK_OpenWindowOnPSTagList
  550.           Diese Routine enthält auch ein CloseWindowSafely !
  551.           ACHTUNG:
  552.           Wurde für dieses Window mit  TRK_SetMenuStrip  ein  Menu
  553.           eingerichtet,   so   muß   dieses   vor    Aufruf    von
  554.           TRK_CloseWindow  'per   Hand'   mit   TRK_ClearMenuStrip
  555.           abgemeldet werden !  Sonst  entsteht  beim  Versuch  der
  556.           Library,  beim   schließen   ihrer   selbst   das   Menu
  557.           auszuklinken, ein Guru.
  558.           Dagegen ist es absolut ungefährlich, ein Window mit Menu
  559.           durch CloseLibrary schließen zu lassen.
  560.           --------------------------------------------------------
  561.           TRK_OpenWindowTagList: Window öffnen
  562.           Originalfunktion: Intuition.OpenWindowTagList
  563.           --------------------------------------------------------
  564.           TRK_OpenWindowOnPubScreen: Window auf PubScreen öffnen
  565.           Parameter: a0 = Zeiger auf die beschreibende
  566.                           NewWindow-Struktur
  567.                      a2 = Zeiger auf den PubScreen-Namen
  568.           Ergebnis: Zeiger auf das erzeugte Window / 0 für Fehler
  569.           --------------------------------------------------------
  570.           TRK_OpenWindowOnPSTagList: Window auf PubScreen öffnen
  571.           Parameter: a0 = Zeiger auf die beschreibende
  572.                           NewWindow-Struktur
  573.                      a1 = Zeiger auf das Tag-Array
  574.                      a2 = Zeiger auf den PubScreen-Namen
  575.           Ergebnis: Zeiger auf das erzeugte Window / 0 für Fehler
  576.           --------------------------------------------------------
  577.           TRK_OpenScreen: Screen öffnen
  578.           Originalfunktion: Intuition.OpenScreen
  579.           --------------------------------------------------------
  580.           TRK_CloseScreen: Screen schließen
  581.           Originalfunktion: Intuition.CloseScreen
  582.           Freigabefunktion zu TRK_OpenScreen und
  583.                 TRK_OpenScreenTagList
  584.           --------------------------------------------------------
  585.           TRK_OpenScreenTagList: Screen öffnen
  586.           Originalfunktion: Intuition.OpenScreenTagList
  587.           --------------------------------------------------------
  588.           TRK_SetMenuStrip: Menu in Window einbinden
  589.           Originalfunktion: Intuition.SetMenuStrip
  590.           Wurde per tracker.library bereits ein  Menu  auf  diesem
  591.           Window  installiert,  so  wird  die   Eintragung   dafür
  592.           überschrieben. Es besteht also nicht die  Notwendigkeit,
  593.           zwischen    mehreren    Aufrufen     dieser     Funktion
  594.           TRK_ClearMenuStrip zu benutzen,  um  unsinnige  Aktionen
  595.           beim Aufräumen zu unterbinden.
  596.           --------------------------------------------------------
  597.           TRK_ClearMenuStrip: Menu von Window loslösen
  598.           Originalfunktion: Intuition.ClearMenuStrip
  599.           Freigabefunktion zu TRK_SetMenuStrip
  600.           --------------------------------------------------------
  601.           TRK_ResetMenuStrip: Menu reinstallieren (zu
  602.                 Intuition.ResetMenuStrip abwärts-kompatibel)
  603.           Parameter: a0 = Zeiger auf die Window-Struktur
  604.                      a1 = Zeiger auf die Menu-Struktur
  605.           Wurde per tracker.library bereits ein  Menu  auf  diesem
  606.           Window  installiert,  so  wird  die   Eintragung   dafür
  607.           überschrieben. Es besteht also nicht die  Notwendigkeit,
  608.           zwischen    mehreren    Aufrufen     dieser     Funktion
  609.           TRK_ClearMenuStrip zu benutzen,  um  unsinnige  Aktionen
  610.           beim Aufräumen zu unterbinden.
  611.           --------------------------------------------------------
  612.           TRK_LockPubScreen: Zugriff auf PubScreen sichern
  613.           Originalfunktion: Intuition.LockPubScreen
  614.           --------------------------------------------------------
  615.           TRK_UnlockPubScreen: PubScreen freigeben
  616.           Originalfunktion: Intuition.UnlockPubScreen
  617.           Freigabefunktion zu TRK_LockPubScreen
  618.           Parameter a0 = Zeiger auf den PubScreen-Namen entfällt
  619.           --------------------------------------------------------
  620.           TRK_GetPrefs: Preferences-Struktur allozieren und
  621.                         aktuelle Preferences einlesen
  622.           Originalfunktion: Intuition.GetPrefs
  623.           Parameter a0 = Zeiger auf Puffer entfällt
  624.           Ergebnis: Zeiger auf die Preferences-Struktur /
  625.                     0 für Fehler
  626.           --------------------------------------------------------
  627.           TRK_GetDefPrefs: Preferences-Struktur allozieren und
  628.                            Standard-Preferences einlesen
  629.           Originalfunktion: Intuition.GetDefPrefs
  630.           Parameter a0 = Zeiger auf Puffer entfällt
  631.           Ergebnis: Zeiger auf die Preferences-Struktur /
  632.                     0 für Fehler
  633.           --------------------------------------------------------
  634.           TRK_SetPrefs: neue Preferences-Werte setzen
  635.           Original-Funktion: Intuition.SetPrefs
  636.           (optional) Freigabefunktion zu
  637.                 TRK_GetPrefs / TRK_GetDefPrefs
  638.           Parameter d0 = Größe der Preferences entfällt
  639.           zusätzlicher Parameter (BOOL) d2 = Flag:
  640.                         Preferences-Struktur freigeben ?
  641.           Ergebnis: Zeiger auf die Preferences-Struktur /
  642.                     0, falls freigegeben
  643.           --------------------------------------------------------
  644.           TRK_FreePrefs: Preferences-Struktur freigeben
  645.           Freigabefunktion zu TRK_GetPrefs / TRK_GetDefPrefs
  646.           Parameter: a0 = Zeiger auf die Preferences-Struktur
  647.           --------------------------------------------------------
  648.           TRK_Request: Requester aktivieren
  649.           Originalfunktion: Intuition.Request
  650.           --------------------------------------------------------
  651.           TRK_EndRequest: Requester beenden
  652.           Originalfunktion: Intuition.EndRequest
  653.           Freigabefunktion zu TRK_Request
  654.           Parameter a1 = Zeiger auf das Window entfällt
  655.           --------------------------------------------------------
  656.           TRK_SetDMRequest: Double-Menu-Requester installieren
  657.           Originalfunktion: Intuition.SetDMRequest
  658.           Wurde per  tracker.library  bereits  ein  DMRequest  auf
  659.           diesem Window installiert, so wird die Eintragung  dafür
  660.           überschrieben. Es besteht also nicht die  Notwendigkeit,
  661.           zwischen    mehreren    Aufrufen     dieser     Funktion
  662.           TRK_ClearDMRequest zu benutzen,  um  unsinnige  Aktionen
  663.           beim Aufräumen zu unterbinden.
  664.           --------------------------------------------------------
  665.           TRK_ClearDMRequest: DMRequest löschen
  666.           Originalfunktion: Intuition.SetDMRequest
  667.           Freigabefunktion zu TRK_SetDMRequest
  668.           --------------------------------------------------------
  669.           TRK_BuildSysRequest: SystemRequester öffnen
  670.           Originalfunktion: Intuition.BuildSysRequest
  671.           --------------------------------------------------------
  672.           TRK_FreeSysRequest: SystemRequester schließen
  673.           Originalfunktion: Intuition.FreeSysRequest
  674.           Freigabefunktion zu TRK_BuildSysRequest
  675.           --------------------------------------------------------
  676.           TRK_GetScreenDrawInfo: DrawInfo-Struktur zu einem Screen
  677.                                  suchen
  678.           Originalfunktion: Intuition.GetScreenDrawInfo
  679.           Warnung: Diese Routine verhindert nicht ein Schließen
  680.           des Screens ! (zumindest bis V37)
  681.           --------------------------------------------------------
  682.           TRK_FreeScreenDrawInfo: DrawInfo-Struktur zu einem
  683.                                   Screen freigeben
  684.           Originalfunktion: Intuition.FreeScreenDrawInfo
  685.           Freigabefunktion zu TRK_GetScreenDrawInfo und
  686.                 TRK_GetScDIPubScreen
  687.           Parameter: a0 = Zeiger auf den Screen entfällt
  688.           --------------------------------------------------------
  689.           TRK_GetScDIPubScreen: PubScreen locken und
  690.                                 DrawInfo-Struktur dazu suchen
  691.           Parameter: a0 = Zeiger auf den PubScreen-Namen
  692.           Ergebnis: Zeiger auf die zugehörige DrawInfo-Struktur /
  693.                     0 für Fehler
  694.           diese Routine ersetzt in etwa
  695.                 TRK_GetScreenDrawInfo(TRK_LockPubScreen(a0))
  696.           --------------------------------------------------------
  697.           TRK_AllocFileRequest: ASL-FileRequester allozieren
  698.           Originalfunktion: ASL.AllocFileRequest
  699.           --------------------------------------------------------
  700.           TRK_AllocAslRequest: ASL-Requester allozieren
  701.           Originalfunktion: ASL.AllocAslRequest
  702.           --------------------------------------------------------
  703.           TRK_FreeAslRequest: Asl-Requester freigeben
  704.           Originalfunktion: Asl.FreeAslRequest
  705.           Freigabefunktion zu TRK_AllocFileRequest,
  706.                 TRK_AllocAslRequest und TRK_AslRequest
  707.           --------------------------------------------------------
  708.           TRK_AslRequest: ASL-Requester allozieren und benutzen
  709.           Parameter: d0 = Typ des Requesters
  710.                      a1 = Zeiger auf eine beschreibendes Tag-Array
  711.           Ergebnis: Zeiger auf erhaltene AslRequest-Struktur /
  712.                     0 für Fehler.
  713.           Das Ergebnis von Asl.AslRequest geht verloren !
  714.           --------------------------------------------------------
  715.           TRK_GetVIPubScreenA: Zugriff auf (GadTools-interne)
  716.                 VisualInfo-Struktur zu einem namentlich bekannten
  717.                 PubScreen sichern
  718.           Parameter: a0 = Zeiger auf den Namen des PubScreen, zu
  719.                         dem die VisualInfo-Struktur gewünscht wird
  720.                      a1 = Zeiger auf eine spezifizierende
  721.                         Tag-Liste
  722.           Ergebnis: Zeiger auf erhaltene VisualInfo-Struktur /
  723.                     0 für Fehler
  724.                 falls d0!=0, enthält ferner a1 die Adresse des
  725.                         gelockten PubScreens.
  726.           TRK_GetVIPubScreenA(name, tlist) ersetzt
  727.           TRK_GetVisualInfoA(TRK_LockPubScreen(name), tlist)
  728.           (plus Safety-Checks)
  729.           --------------------------------------------------------
  730.           TRK_GetVisualInfoA: Zugriff auf (GadTools-interne)
  731.                               VisualInfo-Struktur sichern
  732.           Originalfunktion: GadTools.GetVisualInfoA
  733.           --------------------------------------------------------
  734.           TRK_FreeVisualInfo: VisualInfo-Struktur freigeben
  735.           Originalfunktion: GadTools.FreeVisualInfo
  736.           Freigabefunktion zu TRK_GetVIPubScreenA und
  737.                 TRK_GetVisualInfoA
  738.           --------------------------------------------------------
  739.           TRK_CreateContext: "Context" für GadTools-Gadgets
  740.                               erzeugen
  741.           Originalfunktion: GadTools.CreateContext
  742.           Da mir nach RKRM nicht 100%ig klar ist, ob das  Ergebnis
  743.           und das, was in *a0  geschrieben  wird,  dasselbe  sind,
  744.           behandele ich nicht wie  ursprünglich  geplant  a0==NULL
  745.           selber so, daß ich dann tnd_Data dafür benutze.
  746.           --------------------------------------------------------
  747.           TRK_FreeGadgets: GadTools-Gadgets freigeben
  748.           Originalfunktion: GadTools.FreeGadgets (allerdings mit
  749.                 anderem Parameter !
  750.           Freigabefunktion zu TRK_CreateContext
  751.           Parameter: a0 = die Adresse der Zeigervariable, die
  752.                 bereits TRK_CreateContext() übergeben wurde, NICHT
  753.                 wie bei GadTools.FreeGadgets ihr Inhalt !
  754.           --------------------------------------------------------
  755.           TRK_CreateMenusA: Menu-"Baum" erzeugen
  756.           Originalfunktion: GadTools.CreateMenusA
  757.           --------------------------------------------------------
  758.           TRK_FreeMenus: Menu-"Baum" freigeben
  759.           Originalfunktion: GadTools.FreeMenus
  760.           Freigabefunktion zu TRK_CreateMenusA
  761.           --------------------------------------------------------
  762.           SetTrackingLevel: TrackingLevel wechseln
  763.           Parameter: d0.w = neuer TrackingLevel
  764.           Ergebnis: der bisher gültige TrackingLevel
  765.           --------------------------------------------------------
  766.           GetTrackingLevel: aktuellen TrackingLevel auslesen
  767.           Ergebnis: der gültige TrackingLevel
  768.           --------------------------------------------------------
  769.           FreeUpperTrackingLevels: alle TrackNodes, die unter dem
  770.                 aktuellen TrackingLevel oder drüber erzeugt
  771.                 wurden, löschen
  772.           --------------------------------------------------------
  773.           FreeTrackingLevels: alle TrackNodes, die unter einem
  774.                 bestimmten TrackingLevel oder darüber erstellt
  775.                 wurden, freigeben
  776.           Parameter: d0.w = der minimale freizugebende
  777.                 TrackingLevel
  778.           --------------------------------------------------------
  779.           FreeCurrentTrackingLevel: alle TrackNodes, die unter dem
  780.                 aktuellen TrackingLevel erzeugt wurden, löschen
  781.           --------------------------------------------------------
  782.           FreeTrackingLevel: alle TrackNodes, die unter einem
  783.                 bestimmten TrackingLevel erstellt wurden,
  784.                 freigeben
  785.           Parameter: d0.w = der freizugebende TrackingLevel
  786.           --------------------------------------------------------
  787.           PushTrackingLevel: aktuellen TrackingLevel um 1 erhöhen
  788.           Ergebnis: der neu gesetzte aktuelle TrackingLevel
  789.           War der TrackingLevel bereits -1.w, so wird der Guru
  790.           #AN_Tracker_Level_overflow (Recovery !) erzeugt und der
  791.           TrackingLevel nicht verändert.
  792.           --------------------------------------------------------
  793.           PopTrackingLevels: alle TrackNodes, die unter dem
  794.                 aktuellen TrackingLevel der drüber erzeugt wurden,
  795.                 löschen und den TrackingLevel um 1 erniedrigen
  796.           Ergebnis: der neue TrackingLevel
  797.           war der aktuelle TrackingLevel bereits 1, so wird der
  798.           Guru #AN_Tracker_Level_underflow (Recovery !) erzeugt
  799.           und der TrackingLevel nicht verändert.
  800.           --------------------------------------------------------
  801.           PopTrackingLevel: alle TrackNodes, die unter dem
  802.                 aktuellen TrackingLevel erzeugt wurden, löschen
  803.                 und den TrackingLevel um 1 erniedrigen
  804.           Ergebnis: der neue TrackingLevel
  805.           War der aktuelle TrackingLevel bereits 1, so wird der
  806.           Guru #AN_Tracker_Level_underflow (Recovery !) erzeugt
  807.           und der TrackingLevel nicht verändert.
  808.           --------------------------------------------------------
  809.           DecTrackingLevel: aktuellen TrackingLevel um 1
  810.                 erniedrigen
  811.           Ergebnis: der neu gesetzte aktuelle TrackingLevel
  812.           War der aktuelle TrackingLevel bereits 1, so wird der
  813.           Guru #AN_Tracker_Level_underflow (Recovery !) erzeugt
  814.           und der TrackingLevel nicht verändert.
  815.           --------------------------------------------------------
  816.           HighestTrackingLevel: die Nummer des höchsten benutzten
  817.                 TrackingLevel ermitteln
  818.           Ergebnis: die Nummer des höchsten benutzten
  819.                 TrackingLevel
  820.           Ein Ergebnis 0 bedeutet, daß (außer einer eventuellen
  821.                 Startup-Message) keine TrackNodes existieren !
  822.           --------------------------------------------------------
  823.           NewTrackingLevel: TrackingLevel auf neuen, garantiert
  824.                 noch nicht benutzten Wert setzen
  825.           Ergebnis:  der neu gesetzte aktuelle TrackingLevel
  826.           wird kein freier TrackingLevel gefunden, so wird ein
  827.           Alert erzeugt und 0 zurückgegeben, der TrackingLevel
  828.           jedoch nicht verändert.
  829.           --------------------------------------------------------
  830.           TRK_AllocIFF: IFFHandle allozieren
  831.           Originalfunktion: IFFParse.AllocIFF
  832.           --------------------------------------------------------
  833.           TRK_FreeIFF: IFFHandle freigeben
  834.           Originalfunktion: IFFParse.FreeIFF
  835.           Freigabefunktion zu TRK_AllocIFF
  836.           --------------------------------------------------------
  837.           TRK_OpenIFF: IFFHandle öffnen
  838.           Originalfunktion: IFFParse.OpenIFF
  839.           Konnte die IFFParse-Library (beim Laden der Tracker-
  840.           Library) nicht geöffnet werden, so wird IFFERR_NOTIFF
  841.           returniert. Das kann aber eigentlich nicht passieren, da
  842.           man ohne IFFParse-Library garnicht an den IFFHandle
  843.           kommt.
  844.           --------------------------------------------------------
  845.           TRK_CloseIFF: IFFHandle schließen
  846.           Originalfunktion: IFFParse.CloseIFF
  847.           Freigabefunktion zu TRK_OpenIFF
  848.           --------------------------------------------------------
  849.           TRK_PushChunk: neuen ContextNode auf den Contextstack
  850.                 schieben
  851.           Originalfunktion: IFFParse.PushChunk
  852.           --------------------------------------------------------
  853.           TRK_PopChunk: ContextNode vom Contextstack löschen
  854.           Originalfunktion: IFFParse.PopChunk
  855.           Freigabefunktion zu TRK_PushChunk
  856.           --------------------------------------------------------
  857.           TRK_OpenClipboard: Clipboard-Device für Benutzung durch
  858.                 IFFParse.library öffnen
  859.           Originalfunktion: IFFParse.OpenClipboard
  860.           --------------------------------------------------------
  861.           TRK_CloseClipboard: Clipboard-Device schließen
  862.           Originalfunktion: IFFParse.CloseClipboard
  863.           Freigabefunktion zu TRK_OpenClipboard
  864.           --------------------------------------------------------
  865.           TRK_AllocLocalItem: LocalContextItem allozieren
  866.           Originalfunktion: IFFParse.AllocLocalItem
  867.           --------------------------------------------------------
  868.           TRK_FreeLocalItem: LocalContextItem freigeben
  869.           Originalfunktion: IFFParse.FreeLocalItem
  870.           Freigabefunktion zu TRK_AllocLocalItem
  871.           --------------------------------------------------------
  872.           TRK_CreateIFFasDOS: IFFHandle allozieren, Datei dazu
  873.                 öffnen, InitIFFasDOS und OpenIFF
  874.                 (alles fehlergesichert)
  875.           Parameter: a0 = Zeiger auf den Dateinamen
  876.                      d0 = Modus: IFFF_READ oder IFFF_WRITE
  877.                      d1 = Modus, mit dem die Datei geöffnet werden
  878.                           soll (MODE_...)
  879.           Ergebnis: erhaltener IFFHandle-Zeiger / 0 für Fehler
  880.           --------------------------------------------------------
  881.           TRK_DeleteDOSIFF: IFFHandle schließen, Datei dazu
  882.                 schließen und IFFHandle freigeben
  883.           Parameter: a0 = IFFHandle-Zeiger
  884.           Freigabefunktion zu TRK_CreateIFFasDOS
  885.           --------------------------------------------------------
  886.           TRK_CreateIFFasClip: IFFHandle allozieren, Clipboard-
  887.                 Device dazu öffnen, InitIFFasClip und OpenIFF
  888.                 (alles fehlergesichert)
  889.           Parameter: d0 = Modus: IFFF_READ oder IFFF_WRITE
  890.                      d1 = Clipboard-Unit-Nummer
  891.           Ergebnis: erhaltener IFFHandle-Zeiger / 0 für Fehler
  892.           --------------------------------------------------------
  893.           TRK_DeleteClipIFF: IFFHandle schließen, Clipboardhandle
  894.                 dazu schließen und IFFHandle freigeben
  895.           Parameter: a0 = IFFHandle-Zeiger
  896.           Freigabefunktion zu TRK_CreateIFFasClip
  897.           --------------------------------------------------------
  898.           TRK_GetDiskObject: Icon-Daten einlesen
  899.           Originalfunktion: Icon.GetDiskObject
  900.           --------------------------------------------------------
  901.           TRK_GetDefDiskObject: Standard-Icon-Daten einlesen
  902.           Originalfunktion: Icon.GetDefDiskObject
  903.           Unter icon.library < v36 wird 0 zurückgegeben.
  904.           --------------------------------------------------------
  905.           TRK_GetDiskObjectNew: Icon-Daten einlesen
  906.           Originalfunktion: Icon.GetDiskObjectNew
  907.           Unter icon.library < v36 wird 0 zurückgegeben.
  908.           --------------------------------------------------------
  909.           TRK_PutDiskObject: Icon-Daten schreiben und danach
  910.                 freigeben (ähnlich Icon.PutDiskObject)
  911.           Parameter: a0 = DiskObject-Struktur, die geschrieben
  912.                               werden soll.
  913.                      a1 = Name der Datei, der die Icon-
  914.                               Beschreibung zugeordnet werden soll.
  915.           Ergebnis: Erfolg ? 1 : 0
  916.           bei Erfolg wurde die DiskObject-Struktur freigegeben
  917.                 (TRK_FreeDiskObject).
  918.           Freigabefunktion zu TRK_GetDiskObject,
  919.                 TRK_GetDefDiskObject, TRK_GetDiskObjectNew
  920.           --------------------------------------------------------
  921.           TRK_PutDefDiskObject: Standard-Icon-Daten setzen und
  922.                 danach freigeben (ähnlich Icon.PutDefDiskObject)
  923.           Parameter: a0 = DiskObject-Struktur, die gesetzt werden
  924.                           soll.
  925.           Ergebnis: Erfolg ? 1 : 0
  926.           bei Erfolg wurde die DiskObject-Struktur freigegeben
  927.                 (TRK_FreeDiskObject).
  928.           Freigabefunktion zu TRK_GetDefDiskObject
  929.           --------------------------------------------------------
  930.           TRK_FreeDiskObject: Icon-Daten freigeben
  931.           Originalfunktion: Icon.FreeDiskObject
  932.           Freigabefunktion zu TRK_GetDiskObject,
  933.                 TRK_GetDefDiskObject, TRK_GetDiskObjectNew
  934.  
  935.